﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SisVendas.Constants;
using SisVendas.Entidades;
using SisVendas.Facade;

namespace SisVendas.Windows
{
    public partial class frmCliente : Form
    {

        List<ObservacaoCliente> obsCliente = new List<ObservacaoCliente>();
        GenericConstants.ModoOperacao modoOperacao = GenericConstants.ModoOperacao.Inclusao;
        
        public frmCliente()
        {
            InitializeComponent();
            HabilitarBotoes(modoOperacao);
            HabilitarControles(false);
        }


        private void HabilitarControles(bool valor)
        {
            txtNome.Enabled = valor;
            txtEndereco.Enabled = valor;
            txtCidade.Enabled = valor;
            txtBairro.Enabled = valor;
            txtCelular.Enabled = valor;
            txtCEP.Enabled = valor;
            txtEmail.Enabled = valor;
            txtObs.Enabled = valor;
            btnAdicionar.Enabled = valor;
            txtTelefone1.Enabled = valor;
            txtTelefone2.Enabled = valor;
        }

        private void HabilitarBotoes(GenericConstants.ModoOperacao modoOperacao )
        {
            switch (modoOperacao)
            {
                case GenericConstants.ModoOperacao.Consulta:
                    {
                        tsbNovo.Enabled = false;
                        tsbEditar.Enabled = false;
                        tsbExcluir.Enabled = false ;
                        tsbSalvar.Enabled = false;
                        tsbCancelar.Enabled = false;
                        break;
                    }
                case GenericConstants.ModoOperacao.Inclusao:
                    {
                        tsbNovo.Enabled = true;
                        tsbEditar.Enabled = false;
                        tsbExcluir.Enabled = false;
                        tsbSalvar.Enabled = false;
                        tsbCancelar.Enabled = false;

                        break;
                    }
                case GenericConstants.ModoOperacao.Edicao:
                    {
                        tsbNovo.Enabled = false;
                        tsbEditar.Enabled = false;
                        tsbExcluir.Enabled = false;
                        tsbSalvar.Enabled = true;
                        tsbCancelar.Enabled = true;

                        break;
                    }
                case GenericConstants.ModoOperacao.Exclusao:
                    {
                        tsbNovo.Enabled = false;
                        tsbEditar.Enabled = false;
                        tsbExcluir.Enabled = true;
                        tsbSalvar.Enabled = false;
                        tsbCancelar.Enabled = false;
                        break;

                    }
                default:
                    break;
            }
        }

        private Cliente RecuperarValoresForm()
        {
            Cliente c = new Cliente();

            c.Bairro = txtBairro.Text;
            c.Celular = txtCelular.Text;
            c.CEP = txtCEP.Text;
            c.Cidade = txtCidade.Text;
            c.Email = txtEmail.Text;
            c.Endereco = txtEndereco.Text;
            c.Estado = cbEstado.SelectedText;
            c.Nome = txtNome.Text;
            c.Telefone1 = txtTelefone1.Text;
            c.Telefone2 = txtTelefone2.Text;

            c.Observacoes = obsCliente;

            return c;
        }

        private void PreencherForm(Cliente cliente)
        {
            txtNome.Text = cliente.Nome;
            txtEndereco.Text = cliente.Endereco;
            txtEmail.Text = cliente.Email;
            txtCidade.Text = cliente.Cidade;
            txtCEP.Text = cliente.CEP;
            txtCelular.Text = cliente.Celular;
            txtTelefone1.Text = cliente.Telefone1;
            txtTelefone2.Text = cliente.Telefone2;
            txtBairro.Text = cliente.Bairro;

            obsCliente = cliente.Observacoes;

            CarregarGridObs(obsCliente);

        }

        private void LimparControles()
        {
            txtNome.Clear();
            txtEndereco.Clear();
            txtEmail.Clear();
            txtCidade.Clear();
            txtCEP.Clear();
            txtCelular.Clear();
            txtTelefone1.Clear();
            txtTelefone2.Clear();
            txtBairro.Clear();

            txtObs.Clear();
            obsCliente.Clear();
            modoOperacao = GenericConstants.ModoOperacao.Inclusao;

            CarregarGridObs(null);
        }

        private void CarregarGridObs(List<ObservacaoCliente> obsCliente)
        {
            grvObs.AutoGenerateColumns = true;
            grvObs.DataSource = null;
            grvObs.DataSource = obsCliente;

        }

        private void tsbNovo_Click(object sender, EventArgs e)
        {
            HabilitarBotoes(GenericConstants.ModoOperacao.Edicao);
            HabilitarControles(true);
            modoOperacao = GenericConstants.ModoOperacao.Inclusao;
        }

        private void tsbCancelar_Click(object sender, EventArgs e)
        {
            HabilitarBotoes(GenericConstants.ModoOperacao.Inclusao);
            HabilitarControles(false);
            LimparControles();

        }

        private void btnAdicionar_Click(object sender, EventArgs e)
        {
            Usuario u = new Usuario(1);
            obsCliente.Add(new ObservacaoCliente(DateTime.Now, u, txtObs.Text));

            CarregarGridObs(obsCliente);
            txtObs.Clear();
        }

        private void tsbSalvar_Click(object sender, EventArgs e)
        {
            if (modoOperacao == GenericConstants.ModoOperacao.Inclusao)
            {
                try
                {
                    Cliente c = RecuperarValoresForm();
                    ClienteFacade.InserirCliente(c);
                    HabilitarBotoes(GenericConstants.ModoOperacao.Inclusao);
                    HabilitarControles(false);
                    LimparControles();

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {

        }
       
    }
}
